#include <pthread.h>  // 包含pthread库，用于多线程编程
#include <stdio.h>    // 包含标准输入输出库
#include <unistd.h>   // 包含UNIX标准库，用于sleep函数

pthread_mutex_t lock;  // 定义一个互斥锁变量

// 线程函数，用于打印线程信息
void* print_hello(void* arg) {
    pthread_mutex_lock(&lock);  // 锁定互斥锁，防止其他线程进入临界区
    printf("Hello from thread %ld\n", (long)arg);  // 打印线程编号
    sleep(1);  // 线程休眠1秒，模拟耗时操作
    pthread_mutex_unlock(&lock);  // 解锁互斥锁，允许其他线程进入临界区
    return NULL;  // 线程函数返回NULL
}

int main() {
    pthread_t threads[5];  // 定义一个线程数组，用于存储线程ID
    pthread_mutex_init(&lock, NULL);  // 初始化互斥锁

    // 创建5个线程，每个线程执行print_hello函数，传入不同的参数
    for (long i = 0; i < 5; i++) {
        pthread_create(&threads[i], NULL, print_hello, (void*)i);
    }

    // 等待所有线程执行完毕
    for (int i = 0; i < 5; i++) {
        pthread_join(threads[i], NULL);
    }

    pthread_mutex_destroy(&lock);  // 销毁互斥锁
    return 0;  // 主函数返回0，表示程序正常结束
}
